package com.xigege.netty.nettyComponent.byteBuf;

import com.xigege.netty.nettyComponent.byteBuf.util.DebugByteBufUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;

public class TestSlice {
    public static void main(String[] args) {
        ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer(10);
        byteBuf.writeBytes(new byte[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'});
        DebugByteBufUtil.log(byteBuf);

        // 切片过程中没有进行数据复制
        // 切片后的buf长度被限制死了不可改变
        ByteBuf f1 = byteBuf.slice(0, 5);
        ByteBuf f2 = byteBuf.slice(5, 5);
        DebugByteBufUtil.log(f1);
        DebugByteBufUtil.log(f2);

        //给索引0的位置覆盖并设置一个b，发现两个buf都发生了改变
        System.out.println("=============================");
        f1.setByte(0,'b');
        DebugByteBufUtil.log(byteBuf);
        DebugByteBufUtil.log(f1);

        // 相互影响
        System.out.println("释放原有的byteBuf内存");
        byteBuf.release();
        // 原有内存被释放，这里抛异常
        // 解决办法：f1.retain();
        DebugByteBufUtil.log(f1);
    }
}
